package com.yunkeji.api.pay.service;

import cn.hutool.json.JSONObject;
import com.yunkeji.api.pay.bo.*;
import com.yunkeji.api.pay.vo.PrePayVo;
import com.yunkeji.api.pay.vo.RechargeList;
import com.yunkeji.api.pay.vo.RechargePlanVo;
import com.yunkeji.api.pay.vo.VipPlanVo;
import com.yunkeji.common.core.page.TableDataInfo;
import com.yunkeji.dao.domain.PayDetail;
import com.yunkeji.dao.domain.PayLog;
import com.yunkeji.dao.domain.PayWithDraw;
import com.yunkeji.dao.domain.PayWithdrawPlan;
import com.yunkeji.dao.vo.PayLogVo;
import com.yunkeji.dao.vo.PayWithdrawVo;

import java.util.List;
import java.util.Map;

/** @author 老张 */
public interface PayService {
    /**
     * 充值计划
     *
     * @author 老张
     * @return
     */
    List<RechargePlanVo> rechargePlan();

    /**
     * @param bo
     * @return
     * @author 老张
     */
    PrePayVo rechargeGoldPre(PayBo bo);

    /** 通过订单号进行查询 **/
    PayDetail findByOutTradeNo(String outTradeNo);

    /** 充值成功 */
    void rechargeSuccess(RechargeSuccessBo bo);

    /**
     * 发起提现
     *
     * @author 老张
     */
    void withdraw(WithDrawBo bobo);

    /**
     * 提现列表
     *
     * @author 老张
     * @param bo
     * @return
     */
    TableDataInfo<PayWithdrawVo> withdrawList(WithDrawListBo bo);
    /**
     * VIP充值计划
     *
     * @author 老张
     * @return
     */
    List<VipPlanVo> vipPlan();

    /**
     * 充值会员
     *
     * @author 老张
     * @return
     */
    PrePayVo becomeMember(PayBo bo);
    /**
     * 充值分页
     *
     * @author 老张
     * @return
     */
    TableDataInfo<RechargeList> rechargeList(RechargeBo bo);
    /**
     * 收益
     *
     * @author 老张
     * @return
     */
    TableDataInfo<PayLog> earnDetail(RechargeBo bo);

    /**
     * 小猪电签
     *
     * @author 老张
     */
    String piggyToSign(PiggyToSign piggyToSign);
    /**
     * 小猪电签-回调
     *
     * @author 老张
     */
    void piggySignCallBack(JSONObject notify);
    /**
     * 小猪放款-回调
     *
     * @author 老张
     */
    boolean piggyPayCallBack(String notify);

    List<PayWithdrawPlan> withdrawPlan();
    /**
     * 支出明细
     *
     * @author 老张
     */
    TableDataInfo<PayLogVo> payDetail(RechargeBo bo);
}
